#include <iostream>
#include <string>
#include<stdio.h>
#include <unistd.h>
#include <pthread.h>

__thread int gval = 100;//全局变量
std::string ToHex(pthread_t tid)
{
    char id[128];
    snprintf(id, sizeof(id), "0x%lx", tid);
    return id;
}

void *threadrun(void *args)
{
    std::string name = static_cast<const char *>(args); // 使用static_cast强转类型，得到线程的名字
    while (true)
    { // 任何一个线程可以通过pthread_self获取自己的线程id
        std::string id = ToHex(pthread_self());
        std::cout << name << " " << "is running, tid: " << id <<"，gval："<< gval << "，&gval：" << &gval << std::endl;
        sleep(1);
        gval++;
    }
}

int main()
{
    pthread_t tid;
    // 1.创建一个线程，1.取地址线程id 2.线程属性设为nullptr 3.线程要执行的函数 4.线程的名字(参数强转为void*)
    pthread_create(&tid, nullptr, threadrun, (void *)"thread-1");

    while(true)
    {   
        //主线程不对gval做修改
        std::cout << "main thread, gval：" << gval << "，&gval：" << &gval << std::endl;
        sleep(1);
    }


    std::cout << "new thread tid: " << ToHex(tid) << std::endl;

    // 2.线程一旦创建就需要join它
    pthread_join(tid, nullptr);
    return 0;
}